██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
PostgreSQL
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbqPostgreSQL (pronuncia all'mwbginglese [poʊstɡrɛs ˌkjuːˈɛl] mwcaPronuncia) è un completo mwcqDBMS ad oggetti pubblicato con mwcglicenza libera (stile mwcwLicenza BSD). Spesso abbreviato come "mwdaPostgres", sebbene questo sia un nome vecchio dello stesso progetto, è una reale alternativa sia rispetto ad altri prodotti liberi come mwdqMySQL, mwdgFirebird SQL e MaxDB che a quelli a codice chiuso come mweaOracle, mweqIBM Informix o mwegDB2 ed offre caratteristiche uniche nel suo genere che lo pongono per alcuni aspetti all'avanguardia nel settore delle mwewbasi di dati.
Contents
• Storia
• Indici
• Schemi
• MVCC
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Storia
Inizialmente il DBMS si chiamava mwfwINGRES ed era un progetto della mwgaUniversità di Berkeley. Nel mwgq1982 il capo progetto, mwggMichael Stonebraker, lasciò la Berkeley per commercializzare il prodotto, ma in seguito tornò nel contesto accademico. Nel mwgw1985 lasciò nuovamente l'università per dare vita a un progetto post-Ingres (che prese il nome di mwhaPostgres) che superasse gli evidenti limiti dei prodotti concorrenti dell'epoca. Le basi dei sorgenti di Ingres e di Postgres erano, e sono rimaste nel tempo, ben distinte.
Il nuovo progetto puntava a fornire un supporto completo ai tipi di dati, in particolare la possibilità di definire nuovi tipi di dati, UDF (User Defined Function), User Defined Types. Vi era anche la possibilità di descrivere la relazione tra le entità (tabelle), che fino ad allora veniva lasciata completamente all'utente. Perciò non solo Postgres preservava l'integrità dei dati, ma era in grado di leggere informazioni da tabelle relazionate in modo naturale, seguendo le regole definite dall'utente.
Dal mwhw1986 gli sviluppatori diffusero un gran numero di articoli che descrivevano il nuovo sistema e nel mwia1988 venne pubblicato un primo prototipo funzionante. La versione 1 venne pubblicata nel giugno del mwiq1989 per un numero di utenti contenuto. Seguì una versione 2 nel giugno del mwig1990, in cui il sistema delle regole venne completamente riscritto. Nella versione 3, del mwiw1991, questo sistema venne riscritto ancora, ma venne aggiunto anche il supporto a gestori multipli di immagazzinamento dei dati e un motore di query migliorato. Nel mwja1993 vi era già un numero di utenti notevole che inondava il team di sviluppo con richieste di supporto e di nuove caratteristiche. Dopo aver pubblicato la versione 4, che fu principalmente un ripulimento del codice, il progetto terminò.
Sebbene il progetto Postgres fosse ufficialmente abbandonato, la licenza BSD dava modo agli sviluppatori mwjgOpen Source di ottenere una copia del software per poi migliorarlo a loro discrezione. Nel mwjw1994 due studenti del Berkeley, Andrew Yu e Jolly Chen aggiunsero a Postgres un interprete mwkaSQL per rimpiazzare il vecchio QUEL che risaliva ai tempi di Ingres. Il nuovo software venne quindi pubblicato sul web col nome di mwkgPostgres95. Nel mwkw1996 cambiò nome di nuovo: per evidenziare il supporto al linguaggio SQL, venne chiamato mwlaPostgreSQL.
La prima pubblicazione di PostgreSQL è stata la versione 6. Da allora ad occuparsi del progetto è una comunità di sviluppatori volontari provenienti da tutto il mondo che si coordina attraverso Internet. Alla versione 6 ne sono seguite altre, ognuna delle quali ha portato nuovi miglioramenti. Nel gennaio mwlg2005 è stata pubblicata la 8, la prima nativa per Windows.
Sebbene la licenza permetta la commercializzazione del software, il codice di Postgres non è stato sviluppato commercialmente con la stessa rapidità di Ingres. Ad un certo punto, però, Paula Hawthorn (membro originale del team di Ingres) e Michael Stonebraker formarono una società chiamata Illustra Information Technologies per commercializzarlo.
Descrizione
Un rapido esame di PostgreSQL potrebbe suggerire che sia simile alle altre basi di dati. PostgreSQL usa il linguaggio SQL per eseguire delle query sui dati. Questi sono conservati come una serie di tabelle con mwmwchiavi esterne che servono a collegare i dati correlati. La programmabilità di PostgreSQL è il suo principale punto di forza ed il principale vantaggio verso i suoi concorrenti: PostgreSQL rende più semplice costruire applicazioni per il mondo reale, utilizzando i dati prelevati dalla base di dati.
Le basi di dati SQL conservano dati semplici in "flat table", richiedendo che sia l'utente a prelevare e raggruppare le informazioni correlate utilizzando le query. Questo contrasta con il modo in cui sia le applicazioni che gli utenti utilizzano i dati: come ad esempio in un linguaggio di alto livello con tipi di dato complessi dove tutti i dati correlati operano come elementi completi, normalmente definiti oggetti o record (in base al linguaggio).
La conversione delle informazioni dal mondo SQL a quello della programmazione orientata agli oggetti, presenta difficoltà dovute principalmente al fatto che i due mondi utilizzano differenti modelli di organizzazione dei dati. L'industria chiama questo problema "impedance mismatch" (conflitto di impedenza): mappare i dati da un modello all'altro può assorbire fino al 40% del tempo di sviluppo di un progetto. Un certo numero di soluzioni di mappatura, normalmente dette "mwoaobject-relational mapping", possono risolvere il problema, ma tendono ad essere costose e ad avere i loro problemi, causando scarse prestazioni o forzando tutti gli accessi ai dati ad aver luogo attraverso il solo linguaggio che supporta la mappatura stessa.
PostgreSQL può risolvere molti di questi problemi direttamente nella base di dati. PostgreSQL permette agli utenti di definire nuovi tipi basati sui normali tipi di dato SQL, permettendo alla base di dati stessa di comprendere dati complessi. Per esempio, si può definire un indirizzo come un insieme di diverse stringhe di testo per rappresentare il numero civico, la città, ecc. Da qui in poi si possono creare facilmente tabelle che contengono tutti i campi necessari a memorizzare un indirizzo con una sola linea di codice.
PostgreSQL, inoltre, permette l'ereditarietà dei tipi, uno dei principali concetti della mwowprogrammazione orientata agli oggetti. Ad esempio, si può definire un tipo codice_postale, quindi creare un tipo cap (codice di avviamento postale) o un tipo us_zip_code basato su di esso. Gli indirizzi nella base di dati potrebbero quindi accettare entrambi i tipi, e regole specifiche potrebbero validare i dati in entrambi i casi. Nelle prime versioni di PostgreSQL, implementare nuovi tipi richiedeva scrivere estensioni in C e compilarle nel server della base di dati. Dalla versione 7.4 è diventato molto più semplice creare ed usare tipi personalizzati attraverso il comando "CREATE DOMAIN".
La programmazione della base di dati stessa può ottenere grandi vantaggi dall'uso delle funzioni. La maggior parte dei sistemi SQL permette agli utenti di scrivere una procedura, un blocco di codice SQL che le altre istruzioni SQL possono richiamare. Comunque il SQL stesso rimane inadatto come linguaggio di programmazione, pertanto gli utenti possono sperimentare grandi difficoltà nel costruire logiche complesse. Ancora peggio, il SQL stesso non supporta molti dei principali operatori di base dei linguaggi di programmazione, come le mwpqstrutture di controllo di mwpgciclo e mwpwcondizionale. Pertanto ogni venditore ha scritto le sue estensioni al linguaggio SQL per aggiungere queste caratteristiche, e pertanto queste estensioni non per forza operano su diverse mwqapiattaforme di basi di dati.
In PostgreSQL i programmatori possono implementare la logica in uno dei molti linguaggi supportati.
• Inoltre è disponibile anche un interfacciamento al linguaggio mwuaR, ricco di funzioni statistiche e per il calcolo mwuqmatriciale.
Il programmatore può inserire il codice sul server come mwuwfunzioni, che rendono il codice riusabile come mwvastored procedure, in modo che il codice SQL possa richiamare funzioni scritte in altri linguaggi (come il C o il Perl).
Punti di forza della programmabilità di PostgreSQL:
• Incremento delle prestazioni, in quanto la logica viene applicata direttamente dal server della base di dati in una volta, riducendo il passaggio di informazioni tra il client ed il server.
• Incremento dell'affidabilità, dovuto alla centralizzazione del codice di controllo sul server, non dovendo gestire la sincronizzazione della logica tra molteplici client e i dati memorizzati sul server.
• Inserendo livelli di astrazione dei dati direttamente sul server, il codice del client può essere più snello e semplice.
Questi vantaggi fanno di PostgreSQL, probabilmente, il più avanzato sistema base di dati dal punto di vista della programmabilità, il che aiuta a spiegarne il successo. Utilizzare PostgreSQL può ridurre il tempo totale di programmazione di molti progetti, con i vantaggi suddetti che crescono con la complessità del progetto stesso, ovviamente se utilizzato da utenti esperti nel suo utilizzo.
Indici
Supporta gli indici mwxqGiST e GIN (Indice generalizzato invertito) usa mwxwB+-tree, hash. Si possono creare indici di espressioni con un indice del risultato di un'espressione o una funzione anziché il semplice valore di una colonna, indici parziali dove si indicizza parte di una tabella con l'espressione SQL: CREATE INDEX. È anche in grado di usare indici multipli insieme per eseguire interrogazioni complesse.
Schemi
In PostgreSQL, tutti gli oggetti (con l'eccezione di ruoli e mwygtablespace) sono situati in uno schema. Esso agisce effettivamente come un mwywnamespace, permettendo agli oggetti con lo stesso nome di coesistere nella stessa base di dati. Gli schemi sono analoghi alle cartelle nel sistema dei file, ad eccezione che non possono essere una dentro l'altra, e non è possibile creare collegamenti simbolici che puntano ad un altro schema o oggetto.
Le basi di dati sono create in modo predefinito con lo schema "public" (comune), ma può essere aggiunto qualsiasi altro schema addizionale e il public non è obbligatorio.
Un "percorso di ricerca" determina l'ordine in quale schema sono controllati gli oggetti non qualificati (quelli senza uno schema prefissato) che possono essere configurati sulla base di dati o sul livello di ruolo. Il "percorso di ricerca" contiene in modo predefinito il nome di schema speciale di "$user" (utente) che prima cerca uno schema con nome dell'utente connesso alla base di dati. Se non viene trovato procede a cercare il prossimo schema.
Tipi di dati
Sono inclusi nativamente una grande varietà di tipi di dati:
• Booleani
• numerici con precisione arbitraria
• Caratteri (testo, varchar, char)
• Binari
• Data/ora (timestamp/time con/senza fusi orari, date, interval)
• Money
• Enum
• Bit strings
• Text search type
• Composite
• Arrays (lunghezza variabile e qualsiasi tipo di dato, incluso text e tipi composti) fino a 1GB.
• Primitive geometriche
• Blocchi mwegCIDR e mwewIndirizzi MAC
• mwgaUUID (dalla 8.3)
• mwggJSON (dalla 9.2)
MVCC
PostgreSQL gestisce la concorrenza attraverso un sistema conosciuto come mwhqmwhgcontrollo della concorrenza multiversione (MVCC) che dà ad ogni transazione un'"immagine" della base di dati, permettendo cambiamenti non visibili ad altre transazioni fino a che questi non sono eseguiti. Ciò permette di eliminare quasi sempre il bisogno di ricorrere all'utilizzo di lock di lettura (mwhwread locks) e assicura il mantenimento dei principi ACID in maniera efficiente.
Programmi di gestione a interfaccia grafica
• mwiwphpPgAdmin – è un'applicazione mwjaPHP libera che consente di amministrare in modo semplificato, con un'interfaccia grafica basata sul web, base di dati di PostgreSQL
Altri progetti
Altri progetti
• Wikimedia Commons
• Wikimedia Commons contiene immagini o altri file su PostgreSQL
Collegamenti esterni
• (EN) Sito ufficiale, su postgresql.org.
• citerefopen-library(EN) Opere riguardanti PostgreSQL, su Open Library, Internet Archive.
• PostgreSQL, su packages.debian.org.
• Repository sorgenti di PostgreSQL, su git.postgresql.org.
• citereffree-software-directory(EN) PostgreSQL, su Free Software Directory.
• citereffoldoc(EN) Denis Howe, PostgreSQL, in Free On-line Dictionary of Computing. Disponibile con licenza mwlgGFDL
• mwma(IT) mwmqPostgreSQL su mwmgAppunti di informatica libera
• mwna(EN) * mwnq(IT) PostgreSQL su mwogOpenERP